#include "caller.hpp"
#include <iostream>
#include <functional>

struct Test {
    bool operator() () {
        std::cout << "Test" << std::endl;
    }

    static void test()
    {
        std::cout << "Test" << std::endl;
    } 
};

void print(int i) {
    std::cout << "print: " << i << std::endl;
}

int main()
{
    auto lambda = [&](){ std::cout << "lambda" << std::endl; };
    auto func = std::bind(&print, 10);

    FunctionCaller f1(lambda);
    FunctionCaller f2(func);
    // FunctionCaller f3(Test::test()); // err

    f1();
    f2();
    // f3(); // err
    return 0;
}
